#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
    , switchLanguage(false)
    , pTranslator(nullptr)
{
    ui->setupUi(this);

    QObject::connect(ui->pushButton, SIGNAL(QPushButton::clicked), this, SLOT(this->on_pushButton_clicked()));
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::changeLanguage()
{
    if(!switchLanguage)
    {
        switchLanguage = !switchLanguage;
        if (pTranslator == nullptr)
        {
            pTranslator = new QTranslator();
            bool b = pTranslator->load(":/cn.qm");
            qDebug() << "切换到中文" << b;
        }

        qApp->installTranslator(pTranslator);
        this->Refresh();
    }
    else
    {
        switchLanguage = !switchLanguage;

        if (pTranslator != nullptr)
        {
            // 默认是英文，所以没必要再加载英文资源，直接移除上一次的翻译对象，恢复到默认
            qDebug() << "恢复到英文";
            qApp->removeTranslator(pTranslator);
            this->Refresh();
        }
    }
}

void MainWindow::Refresh()
{
    this->ui->retranslateUi(this);

    // 演示动态翻译文本
    this->ui->label_2->setText(tr("TextLabel111"));
    this->ui->pushButton->setText(tr("PushButton111"));


    // 本例子只是演示多国语切换功能，通过按钮或者ComboBox进行切换
    // 点击按钮后，比如切换到汉语，ComboBox显示的是 "英文"，表面文字确实是汉语，但是没切换到 "汉语" 选项，
    // 为什么不进行切换？ 因为这里只是演示，ComboBox本身同能也是切换多国语，如果点击按钮后，主动改变ComboBox选项，
    // 那么会触发ComboBox的currentIndexChanged事件，又进行多国语切换，导致进入死循环。
    // 实际使用中，要么用Button，要么用ComboBox，不用同时具有切换功能。
    // 只有ComboBox本身不是进行多国语切换，是可以主动改变选型。
    // 如果非要改变选项，为了避免进入死循环， 也是有办法，可以在改变选项前，调用blockSignals禁用ComboBox的事件，改变后，再恢复。

    this->ui->comboBox->blockSignals(true);
    this->ui->comboBox->setCurrentIndex(switchLanguage?1:0);
    this->ui->comboBox->blockSignals(false);
}

void MainWindow::on_pushButton_clicked()
{
    qDebug() << "点击了 Button ";
    changeLanguage();    
}

void MainWindow::on_comboBox_currentIndexChanged(int index)
{
    qDebug() << "切换 ComboBox " << index;
    changeLanguage();
}
